Your program calls a library function to register the interrupt-handling function. When the device generates an interrupt, the kernel branches directly into your handler. Because the handler runs as a subroutine of the kernel, it can use only a very limited set of system and library functions. However, it can refer to variables in the process address space, and it can wake up a process that is blocked, waiting for the interrupt to occur.
Combined with PIO, user-level interrupts allow you to test most of the logic of a device driver for a new device in user-level code.
In IRIX 6.2, support for user-level interrupts is limited to VME devices and to external interrupts in the Challenge L, Challenge XL,and Onyx systems and their POWER versions.
For more details on user-level interrupts, see Chapter 7, "User-Level Interrupts" and the uli(3) reference page.